home *** CD-ROM | disk | FTP | other *** search
/ IRIX Patches 1995 June / SGI IRIX Patches 1995 Jun.iso / 5.3_patches / patchSG0000154 / patchSG0000154.idb / usr / share / src / OpenGL / samples / depth.c.z / depth.c
Encoding:
C/C++ Source or Header  |  1995-06-12  |  4.0 KB  |  185 lines

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include "tk.h"
  5.  
  6.  
  7. #define CI_OFFSET_1 16
  8. #define CI_OFFSET_2 32
  9.  
  10.  
  11. GLenum rgb, doubleBuffer, directRender;
  12.  
  13. GLenum antiAlias, stipple;
  14. GLubyte stippleBits[32*4] = {
  15.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  16.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  17.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  18.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  19.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  20.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  21.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  22.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  23.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  24.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  25.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  26.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  27.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  28.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  29.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  30.     0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
  31. };
  32.  
  33.  
  34. static void Init(void)
  35. {
  36.     GLint i;
  37.  
  38.     glClearColor(0.0, 0.0, 0.0, 0.0);
  39.     glClearIndex(0.0);
  40.  
  41.     if (!rgb) {
  42.     for (i = 0; i < 16; i++) {
  43.         tkSetOneColor(i+CI_OFFSET_1, 0.0, 0.0, i/15.0);
  44.         tkSetOneColor(i+CI_OFFSET_2, 0.0, i/15.0, 0.0);
  45.     }
  46.     }
  47.  
  48.     glPolygonStipple(stippleBits);
  49.  
  50.     antiAlias = GL_FALSE;
  51.     stipple = GL_FALSE;
  52. }
  53.  
  54. static void Reshape(int width, int height)
  55. {
  56.  
  57.     glViewport(0, 0, (GLint)width, (GLint)height);
  58.  
  59.     glMatrixMode(GL_PROJECTION);
  60.     glLoadIdentity();
  61.     glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0);
  62.     glMatrixMode(GL_MODELVIEW);
  63. }
  64.  
  65. static GLenum Key(int key, GLenum mask)
  66. {
  67.  
  68.     switch (key) {
  69.       case TK_ESCAPE:
  70.     tkQuit();
  71.       case TK_1:
  72.     antiAlias = !antiAlias;
  73.     break;
  74.       case TK_2:
  75.     stipple = !stipple;
  76.     break;
  77.       default:
  78.     return GL_FALSE;
  79.     }
  80.     return GL_TRUE;
  81. }
  82.  
  83. static void Draw(void)
  84. {
  85.     GLint ci1, ci2;
  86.  
  87.     glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  88.  
  89.     if (antiAlias) {
  90.     ci1 = CI_OFFSET_1;
  91.     ci2 = CI_OFFSET_2;
  92.     glBlendFunc(GL_SRC_ALPHA, GL_ONE);
  93.     glEnable(GL_BLEND);
  94.     glEnable(GL_POLYGON_SMOOTH);
  95.     glDisable(GL_DEPTH_TEST);
  96.     } else {
  97.     ci1 = TK_BLUE;
  98.     ci2 = TK_GREEN;
  99.     glDisable(GL_BLEND);
  100.     glDisable(GL_POLYGON_SMOOTH);
  101.     glEnable(GL_DEPTH_TEST);
  102.     }
  103.  
  104.     if (stipple) {
  105.     glEnable(GL_POLYGON_STIPPLE);
  106.     } else {
  107.     glDisable(GL_POLYGON_STIPPLE);
  108.     }
  109.  
  110.     glBegin(GL_TRIANGLES);
  111.     (rgb) ? glColor3fv(tkRGBMap[TK_BLUE]) : glIndexi(ci1);
  112.     glVertex3f( 0.9, -0.9, -30.0);
  113.     glVertex3f( 0.9,  0.9, -30.0);
  114.     glVertex3f(-0.9,  0.0, -30.0);
  115.     (rgb) ? glColor3fv(tkRGBMap[TK_GREEN]) : glIndexi(ci2);
  116.     glVertex3f(-0.9, -0.9, -40.0);
  117.     glVertex3f(-0.9,  0.9, -40.0);
  118.     glVertex3f( 0.9,  0.0, -25.0);
  119.     glEnd();
  120.  
  121.     glFlush();
  122.  
  123.     if (doubleBuffer) {
  124.     tkSwapBuffers();
  125.     }
  126. }
  127.  
  128. static GLenum Args(int argc, char **argv)
  129. {
  130.     GLint i;
  131.  
  132.     rgb = GL_TRUE;
  133.     doubleBuffer = GL_FALSE;
  134.     directRender = GL_TRUE;
  135.  
  136.     for (i = 1; i < argc; i++) {
  137.     if (strcmp(argv[i], "-ci") == 0) {
  138.         rgb = GL_FALSE;
  139.     } else if (strcmp(argv[i], "-rgb") == 0) {
  140.         rgb = GL_TRUE;
  141.     } else if (strcmp(argv[i], "-sb") == 0) {
  142.         doubleBuffer = GL_FALSE;
  143.     } else if (strcmp(argv[i], "-db") == 0) {
  144.         doubleBuffer = GL_TRUE;
  145.     } else if (strcmp(argv[i], "-dr") == 0) {
  146.         directRender = GL_TRUE;
  147.     } else if (strcmp(argv[i], "-ir") == 0) {
  148.         directRender = GL_FALSE;
  149.     } else {
  150.         printf("%s (Bad option).\n", argv[i]);
  151.         return GL_FALSE;
  152.     }
  153.     }
  154.     return GL_TRUE;
  155. }
  156.  
  157. void main(int argc, char **argv)
  158. {
  159.     GLenum type;
  160.  
  161.     if (Args(argc, argv) == GL_FALSE) {
  162.     tkQuit();
  163.     }
  164.  
  165.     tkInitPosition(0, 0, 300, 300);
  166.  
  167.     type = TK_DEPTH;
  168.     type |= (rgb) ? TK_RGB : TK_INDEX;
  169.     type |= (doubleBuffer) ? TK_DOUBLE : TK_SINGLE;
  170.     type |= (directRender) ? TK_DIRECT : TK_INDIRECT;
  171.     tkInitDisplayMode(type);
  172.  
  173.     if (tkInitWindow("Depth Test") == GL_FALSE) {
  174.     tkQuit();
  175.     }
  176.  
  177.     Init();
  178.  
  179.     tkExposeFunc(Reshape);
  180.     tkReshapeFunc(Reshape);
  181.     tkKeyDownFunc(Key);
  182.     tkDisplayFunc(Draw);
  183.     tkExec();
  184. }
  185.